#ifndef BUTTON_OBJECT_HPP_INCLUDED
#define BUTTON_OBJECT_HPP_INCLUDED
#include <GQE/Entities/interfaces/IObject.hpp>
#include "JDD.hpp"

class ButtonObject : public GQE::IObject
{
public:
    ButtonObject(GQE::App* theApp, GQE::typeObjectID theID, unsigned char theFlags);

    virtual ~ButtonObject();
    /**
     * DoInit is responsible for initializing this object
     */
    virtual void DoInit();
    /**
    * DeInit is responsible for marking this object to be cleaned up
    */
    void DeInit()
    {

    }
    /**
    * Access Methods
    **/
    /**
     * HandleEvents is responsible for handling input events for this
     * object when it is the active State.
     */
    virtual void HandleEvents(sf::Event theEvent);

    virtual void Collision(IObject* other, GQE::typeCollisionResult result);

    /**
     * Update is responsible for handling all Object update needs for this
     * Object when it is the active Object.
     */
    virtual void UpdateFixed(void);
    /**
     * Update is responsible for handling all Object update needs for this
     * Object when it is the active Object.
     */
    virtual void UpdateVariable(float theElapsedTime);

    /**
     * Draw is responsible for handling all Drawing needs for this State
     * when it is the Active State.
     */
    virtual void Draw(void);

    /**
     * HandleCleanup is responsible for calling Cleanup if this class has been
     * flagged to be cleaned up after it completes the game loop.
     */
    void HandleCleanup(void)
    {

    }
	void SetLong(bool theLong);
    void SetText(std::string theText);
	void SetAction(std::string theAction){mAction=theAction;};
	void SetIndex(int theIndex){mIndex=theIndex;};
protected:
    ///Variables
    sf::String mTopString;
    sf::String mMidString;
    sf::String mBottomString;
    sf::IntRect mClickArea;
    std::string mText;
	std::string mAction;
    bool mPressed;
	bool mLong;
	int mMaxChars;
	int mIndex;
    /**
     * Cleanup is responsible for performing any cleanup required before
     * this State is removed.
     */
    virtual void Cleanup(void);
private:

    /**
     * Our copy constructor is private because we do not allow copies of
     * our Singleton class
     */
    ButtonObject(const ButtonObject&);  // Intentionally undefined

    /**
     * Our assignment operator is private because we do not allow copies
     * of our Singleton class
     */
    ButtonObject& operator=(const ButtonObject&); // Intentionally undefined
};
#endif
